/**
 * @param {number[]} nextVisit
 * @return {number}
 */
/**
 * dp[i]表到第i个房间时的天数
 *  nextVisit 只会后退, 那么想要到达第i给房间, 必须是前进到达
 *   即必须到达 第i-1个房间 偶数次  
 *       进而可推出前面所有房间都需到达偶数次(也就是奇数一次 偶数一次)
 *       也就是 当前房间次数 = 奇数次 + 偶数次 + 1
 *  偶数次 即是 从 nextVisit[i] 再次到达 i
 *  需要 dp[i] - dp[nextVisit[i]] + 1 次
 *  则 状态转移方程为 dp[i] = dp[i-1] + (dp[i-1] - dp[nextVisit[i]] + 1) + 1
 */ 
 var firstDayBeenInAllRooms = function(nextVisit) {
  const mod = 1e9+7
  const n = nextVisit.length
  const dp = new Array(n)
  dp[0] = 0
  for(let i = 1; i<n; i++){
    dp[i] = (2 * dp[i-1] - dp[nextVisit[i-1]] + 2) % mod
  }
  return (dp[n-1]+mod) % mod
};